package com.tedu.API;

import org.junit.Test;

public class StringBuilderAPI {
    /**
     * 字符串大量拼接：注意String造成内存溢出
     * String str="123"+st;
     * String st="456";
     */
    @Test
    public void testString(){
        String str="字符串";
        for(int i=0;i<1000000000;i++){
            str=str+i;  //字符串1  2 3  4 ....一致拼到结尾
            System.out.println(str);  //别运行  运行就废了！！！
        }
    }
    /**
     * String---不可改变对象 BUG【常量池】
     * 假设：拼接出10000000000W个String---内存【开销过大】
     * 操作系统发现内存空间越来越小，会去硬盘上开辟空间----程序、电脑会卡
     *
     * 解决方案：不创建新对象，在原来对象上实现拼接【添加、替换、插入】
     * StringBuilder对象   可以改变字符串对象
     * 语法：StringBuilder sb=new StringBuilder("字符串");
     *
     * C语言：    定义变量   int a=malloc(4); 开辟4个字节空间
     *                     a=1;
     *                     free(a);     清理内存     //自己清理内存
     *                     不会存在内存溢出
     * java语言： 定义变量   int a=1  内存开辟a空间，保存1，JVM虚拟机提供GC功能
     *                     会存在内存溢出
     */
    @Test
    public void testSB(){
        //创建可变的字符串对象【解决String大量拼接，造成内存溢出】
        String str="你就是我的";
        StringBuilder sb=new StringBuilder(str);
        //append方法  添加新字符串，等同于加号【拼接】
        sb.append("小可爱~");
        System.out.println(sb);
    }
    /**
     * replace方法  替换    返回值：String
     * 作用：可以将字符串中指定范围内"内容"替换成给定的内容
     * 口诀：含头不含尾
     * 语法：replace(in start,int end,String str)
     *              开始位置， 结束位置，替换内容
     */
    @Test
    public void testReplace(){
        //创建StringBuilder可变字符串类,可以在构造器中直接传字符串
        StringBuilder sb=new StringBuilder("我就是你的忠诚舔狗");
        sb=sb.replace(3,4,"王培贤");
        System.out.println(sb);
    }
    /**
     * insert方法    插入    返回值：String
     * 作用：将给定的字符串插入到当前字符串中的某个位置
     * 写法：insert(int index,String str)
     *             插入位置     插入内容
     */
    @Test
    public void testInsert(){
        //创建可变字符串对象
        StringBuffer sb=new StringBuffer("哪有天天哭，哪有赌狗天天输！");
        sb=sb.insert(2,"小孩"); //在哪插入 在哪之前产生
        System.out.println(sb);
    }
    /** 考试题
     * StringBuilder和StringBuffer的区别
     * StringBuilder和StringBuffer---方法完全一致【追加，替换，插入】
     * StringBuffer----JDK1.0----线程安全【效率低】
     * StringBuilder---JDK1.5----线程不安全【效率高】  首选！
     *
     * 需求说明书：模块用什么类【标注】   业务
     */
}
